package com.ticket.sass.admin.config

import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl
import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
import com.ticket.sass.admin.service.impl.TenantWxaConfigServiceImpl
import com.ticket.sass.common.exception.enums.ErrorCode
import com.ticket.sass.common.exception.exception.InternalException
import com.ticket.sass.common.rpc.dto.output.ResultWrapOutput
import org.springframework.stereotype.Component


/**
 * 微信小程序配置管理类
 *
 * 负责管理微信小程序的相关配置，包括构建微信小程序服务实例。
 *
 * @property tenantWxaConfigService 租户微信小程序配置服务
 *
 * @author 朱其鹏
 * @date 2024/3/25 17:24
 */
@Component
class WxMaServiceConfigurer(
    private val tenantWxaConfigService: TenantWxaConfigServiceImpl,
) {
    /**
     * 构建微信小程序服务实例
     *
     * 根据当前的租户微信小程序配置，构建并返回微信小程序服务实例。
     *
     * @return [WxMaServiceImpl] 微信小程序服务实例
     *
     * @throws InternalException 如果微信小程序配置不存在
     */
    fun build(): WxMaServiceImpl {
        val config = tenantWxaConfigService.getOne(QueryWrapper())
            ?: throw InternalException(ErrorCode.CONFIG_ERROR, "缺少租户微信小程序配置")

        return WxMaServiceImpl().apply {
            wxMaConfig = WxMaDefaultConfigImpl().also {
                it.appid = config.appid
                it.secret = config.secret
                it.msgDataFormat = "JSON"
            }
        }
    }
}